package br.com.fatecjp.pooai.gerenciador.taxi.ambiente;

import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import br.com.fatecjp.pooai.gerenciador.taxi.core.Cliente;
import br.com.fatecjp.pooai.gerenciador.taxi.core.Taxi;

public class Ambiente {

	private Map<String, Taxi> taxis;
	private Map<String, Cliente> clientes;
	private Map<String, Posicao> destinosClientes;

	public Ambiente() {
		this.taxis = new ConcurrentHashMap<String, Taxi>();
		this.clientes = new ConcurrentHashMap<String, Cliente>();
		this.destinosClientes = new ConcurrentHashMap<String, Posicao>();
	}

	public void adicionarTaxi(Taxi taxi) {
		this.taxis.put(taxi.getIdentificacao(), taxi);
	}

	public void removerTaxi(String identificacao) {
		this.taxis.remove(identificacao);
	}

	public Collection<Taxi> listarTaxis() {
		return Collections.unmodifiableCollection(this.taxis.values());
	}

	public Taxi obterTaxi(String identificacao) {
		return this.taxis.get(identificacao);
	}

	public void adicionarCliente(Cliente cliente) {
		this.clientes.put(cliente.getIdentificacao(), cliente);
	}

	public void removerCliente(String identificacao) {
		this.clientes.remove(identificacao);
	}

	public Collection<Cliente> listarClientes() {
		return Collections.unmodifiableCollection(this.clientes.values());
	}

	public void adicionarDestinoCliente(String identificacaoCliente,
			Posicao destino) {
		this.destinosClientes.put(identificacaoCliente, destino);
	}

	public Collection<Posicao> listarDestinosClientes() {
		return Collections.unmodifiableCollection(this.destinosClientes
				.values());
	}

	public void removerDestinoCliente(String identificacaoCliente) {
		this.destinosClientes.remove(identificacaoCliente);
	}

}
